package ljl.codetop;

import java.util.ArrayList;
import java.util.List;

public class _54_spiral_order {

    /**
     * 这是一道中等题，没那么简单，啪就出来
     */
    static class tryout {
        public List<Integer> spiralOrder(int[][] matrix) {
            List<Integer> res = new ArrayList<>();
            int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1;
            while (l <= r && t <= b) {
                for (int i = l; i <= r; i++) {
                    res.add(matrix[t][i]);
                }
                for (int i = t + 1; i <= b; i++) {
                    res.add(matrix[i][r]);
                }
                // todo 最难的是这个条件，两个条件都满足才能返程，想想为什么？
                // 如果分开写，会导致多数；如果只有一行或一列，上面两个循环就处理了；分开写，下面的循环总是会多数
                if (l < r && t < b) {
                    for (int i = r - 1; i >= l; i--) {
                        res.add(matrix[b][i]);
                    }
                    for (int i = b - 1; i > t; i--) {
                        res.add(matrix[i][l]);
                    }
                }
                l++; r--; t++; b--;
            }
            return res;
        }
    }
}
